<html>

	<head>
		<title>5.5 paginate 分页支持</title>
		<meta charset="utf-8" />
		<meta name="author" content="jfinal,yaolin" />
		<meta name="Keywords" content="" />
		<link rel="stylesheet" type="text/css" href="../../css/global.css" />
	</head>

	<body>
		<h1>5.5 声明式事务</h1>
		<p>Model 与 Db 中提供了四种 paginate 分页 API，第一种是： paginate(int pageNumber, int pageSize, String select, String sqlExceptSelect, Object... paras)，其中的参数含义分别为： 当前页 的页号、每页数据条数、 sql 语句的 select 部分、 sql 语句除了 select 以外的部分、查询参数。 绝大多数情况下使用这个 API 即可。 以下是使用示例：</p>
		<img src="../../images/ativeRecord/5.5.1.png" />
		<p>第二种是： paginate(int pageNumber, int pageSize, boolean isGroupBySql, String select, String sqlExceptSelect, Object... paras)， 相对于第一种仅仅多了一个 boolean isGroupBySql 参数，以下 是代码示例：
		</p>
		<img src="../../images/ativeRecord/5.5.2.png" />
		<p>这种 API 用于具有 group by 子句的 sql，如果是嵌套型 sql，并且 group by 不在最外层那 么仍然可以不用该 API，例如： select * from (select x from t group by y) as t 这种 group by 在内 层可以不用该 API</p>
		<p>第三种是： paginateByFullSql(int pageNumber, int pageSize, String totalRowSql, String findSql, Object... paras)， 相对于第一种是将查询总行数与查询数据的两条 sql 独立出来，这样处理主要 是应对具有<span class="red">复杂 order by </span>语句的情况， 只有在使用第一种 paginate 出现异常时才需要使用该 API，以下是代码示例：
		</p>
		<img src="../../images/ativeRecord/5.5.3.png" />
		<p>上例代码中的 order by 子句并不复杂，所以仍然可以使用第一种 API 搞定。</p>
		<p>第四种是： paginate(int pageNumber, int pageSize, SqlPara sqlPara)， 用于配合 sql 管理功能使用，将在 sql 管理功能那章做介绍。
		</p>
	</body>

</html>